﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Fuyao.Business.Entities.Models;
using Fuyao.Business.Logic.BC;
using Fuyao.Win.UI.Util;
using Fuyao.Win.UI.Common;

namespace Fuyao.Win.UI.Mantenimientos
{
    public partial class frmListProductos : Form
    {
        BusinessLogic bc = new BusinessLogic();
        List<Producto> listProducto = new List<Producto>();

        public frmListProductos()
        {
            InitializeComponent();
        }

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            this.ControlBox = false;
            this.WindowState = FormWindowState.Maximized;
            this.BringToFront();            
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            Mantenimientos.frmProductos frm = new Mantenimientos.frmProductos();          
            frm.ShowDialog();
            if (frm.action) cargarGrillaProductos(false);
        }     
      

        private void cargarGrillaProductos(bool _flag)
        {
            Producto beProducto = new Producto();
            beProducto.CodigoProducto = this.txtCodigo.Text.Trim() == string.Empty ? "0" : this.txtCodigo.Text.Trim();
            beProducto.Caracteristica = this.txtCaracteristica.Text.Trim() == string.Empty ? "0" : this.txtCaracteristica.Text.Trim();
            beProducto.DescripcionProducto = this.txtDescripcionProducto.Text.Trim() == string.Empty ? "0" : this.txtDescripcionProducto.Text.Trim();
            beProducto.Estado = this.cboEstado.SelectedIndex == 0 ? true : false;
            listProducto = bc.getProductsByFiler(beProducto);         
            if (listProducto.Count > 0) dgvProductos.DataSource = listProducto;
            else
            {
                if (!_flag)
                {
                    MessageBox.Show("No se encontraron registros, verifique los filtros de búsqueda", "Sistema FUYAO - Mensaje de Confirmación", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    dgvProductos.DataSource = null;
                }
            }
        }

        private void setColumnasGrilla()
        {
            ColProductoID.DataPropertyName = "ProductoID";
            colCodigoProducto.DataPropertyName = "CodigoProducto";
            colCaracteristica.DataPropertyName = "Caracteristica";
            colDescripcionProd.DataPropertyName = "DescripcionProducto";
            ColPrecio.DataPropertyName = "Precio";
            colDescuento.DataPropertyName = "Descuento";
            ColEstadoProducto.DataPropertyName = "Estado";
        }

        private void limpiarControles()
        {
            Utilitarios.limpiarControles(this);
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            if (dgvProductos.RowCount == 0)
            {
                MessageBox.Show("No existen registros para Editar", "Sistema FUYAO - Validando Opción", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            if (dgvProductos.CurrentRow != null && dgvProductos.CurrentRow.DataBoundItem != null) //instanciarFrmProducto("EDITAR PRODUCTO", false, ((Producto)dgvProductos.CurrentRow.DataBoundItem)); //Editar
            {
                Producto oProducto = (Producto)dgvProductos.CurrentRow.DataBoundItem;
                Mantenimientos.frmProductos frm = new Mantenimientos.frmProductos();
                frm.ProductoID = oProducto.ProductoID;
                frm.ShowDialog();
                if (frm.action) cargarGrillaProductos(false);
            }
            else
            {
                MessageBox.Show("Seleccione un registro para Editar", "Sistema FUYAO - Validando Opción", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }            
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (dgvProductos.RowCount == 0)
            {
                MessageBox.Show("No existen registros para Eliminar", "Sistema FUYAO - Validando Opción", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            if (dgvProductos.CurrentRow != null) eliminarProducto();
            else
            {
                MessageBox.Show("Seleccione un registro para Eliminar", "Sistema FUYAO - Validando Opción", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }     
        }

        private void eliminarProducto()
        {
            if (!((Producto)dgvProductos.CurrentRow.DataBoundItem).Estado)
            {
                MessageBox.Show("El registro seleccionado ya se encuentra eliminado", "Sistema FUYAO - Validando opción", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }  

            if (MessageBox.Show("Esta seguro que desea eliminar el registro seleccionado", "Sistema FUYAO - Mensaje de Confirmación", MessageBoxButtons.YesNo,
                    MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                if (bc.DeleteProducto(((Producto)dgvProductos.CurrentRow.DataBoundItem).ProductoID,VariablesGlobales.GlobalEnUsuario.UsuarioID))
                {
                    MessageBox.Show("Se eliminó el registro correctamente", "Sistema FUYAO - Mensaje de Confirmación", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    cargarGrillaProductos(false);
                }
                else
                    MessageBox.Show("Error al eliminar el registro seleccionado, contacte con Sistemas", "Sistema FUYAO - Mensaje de Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnMaximizar_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;
        }

        private void btnRestaurar_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Normal;
        }

        private void frmListProductos_Load(object sender, EventArgs e)
        {
            this.txtCodigo.Focus();
            this.cboEstado.SelectedIndex = 0;
            Utilitarios.configurarGrilla(ref dgvProductos);
            setColumnasGrilla();
            cargarGrillaProductos(true);
        }

        private void btnBuscarProducto_Click(object sender, EventArgs e)
        {
            cargarGrillaProductos(false);  
        }

        private void txtCodigo_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(Keys.Enter)) this.txtCaracteristica.Focus();
        }

        private void txtCaracteristica_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(Keys.Enter)) this.txtDescripcionProducto.Focus();
        }

        private void txtDescripcionProducto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(Keys.Enter)) this.btnBuscarProducto.Focus();
        }

        #region Antes
        /*private void dgvProductos_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsNumber(e.KeyChar) || e.KeyChar == (Char)Keys.Back) e.Handled = false;
            else e.Handled = true;    
        }

        private void dgvProductos_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            if (dgvProductos.CurrentCell.ColumnIndex == ColPrecio.Index || dgvProductos.CurrentCell.ColumnIndex == colDescuento.Index)
            {
                TextBox txt = e.Control as TextBox;
                if (txt != null) txt.KeyPress += new KeyPressEventHandler(dgvProductos_KeyPress);
            }
        }*/
        #endregion

        private void dgvProductos_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            if (dgvProductos.IsCurrentCellDirty)
            {
                if (e.ColumnIndex == ColPrecio.Index || e.ColumnIndex == colDescuento.Index)
                {
                    if (!Utilitarios.IsNumeric(e.FormattedValue))
                    {
                        MessageBox.Show("Ingrese una dato válido o presione ESC", "Sistema FUYAO - Mensaje de Validación", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        e.Cancel = true;
                    }
                }
            }
        }       
      
        private void dgvProductos_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            if (e.ColumnIndex == colCodigoProducto.Index || e.ColumnIndex == colCaracteristica.Index ||
                e.ColumnIndex == colDescripcionProd.Index || e.ColumnIndex == ColEstadoProducto.Index)
                e.Cancel = true;
        }

        private void dgvProductos_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvProductos[ColPrecio.Index, e.RowIndex].Value == null) dgvProductos[ColPrecio.Index, e.RowIndex].Value = Convert.ToDecimal(0);
            if (dgvProductos[colDescuento.Index, e.RowIndex].Value == null) dgvProductos[colDescuento.Index, e.RowIndex].Value = Convert.ToDecimal(0);
            dgvProductos[ColPrecio.Index, e.RowIndex].Value = Utilitarios.FormatoPrecio(Convert.ToDouble(dgvProductos[ColPrecio.Index, e.RowIndex].Value));
            dgvProductos[colDescuento.Index, e.RowIndex].Value = Utilitarios.FormatoPrecio(Convert.ToDouble(dgvProductos[colDescuento.Index, e.RowIndex].Value));

            if (e.ColumnIndex == ColPrecio.Index) bc.UpdatePrecio(((Producto)dgvProductos.CurrentRow.DataBoundItem).ProductoID, (decimal)((Producto)dgvProductos.CurrentRow.DataBoundItem).Precio, VariablesGlobales.GlobalEnUsuario.UsuarioID);
            if (e.ColumnIndex == colDescuento.Index) bc.UpdateDescuento(((Producto)dgvProductos.CurrentRow.DataBoundItem).ProductoID, (decimal)((Producto)dgvProductos.CurrentRow.DataBoundItem).Descuento, VariablesGlobales.GlobalEnUsuario.UsuarioID);

            //cargarGrillaProductos(false);  

        }
    }
}
